/*
 * @Description: In User Settings Edit
 * @Author: your name
 * @Date: 2019-08-08 14:05:37
 * @LastEditTime: 2019-08-10 10:22:29
 * @LastEditors: Please set LastEditors
 */
/*
 * @lc app=leetcode.cn id=3 lang=javascript
 *
 * [3] 无重复字符的最长子串
 *
 * https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/
 *
 * algorithms
 * Medium (30.40%)
 * Likes:    2149
 * Dislikes: 0
 * Total Accepted:    173.8K
 * Total Submissions: 566.8K
 * Testcase Example:  '"abcabcbb"'
 *
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 * 
 * 示例 1:
 * 
 * 输入: "abcabcbb"
 * 输出: 3 
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 * 
 * 
 * 示例 2:
 * 
 * 输入: "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 * 
 * 
 * 示例 3:
 * 
 * 输入: "pwwkew"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
 * 请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
 * 
 * 
 */
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    if(!s) return 0
    // 尺取法
    let head = 0
    let str_child = ''
    let max = 1
    for(let i=1;i<=s.length;i++){
        str_child = s.slice(head,i)  // 截取一部分字符串
        // console.log(str_child,'+++++')
        if(str_child.includes(s[i])){
            max = Math.max(max,i-head)
            head = str_child.indexOf(s[i])+head+1
            // console.log(head,str_child,i,max)
        }else{
            // console.log(head,str_child,i,max,'----')
            max = Math.max(max,i-head)
        }

    }
    return max
};

